#ifndef __DOCUMENTSPROCESSOR_H__
#define __DOCUMENTSPROCESSOR_H__

#include "DictionaryFile.h"
#include "AuxiliaryFile.h"
#include "DocumentFile.h"

#include "../interprete.h"
#include "../implementacioninterprete.h"

#include "../indice/invertedindex/src/invertedindex.h"
#include "../indice/invertedindex/src/invertedindexdata.h"
#include "../indice/invertedindex/src/document.h"
#include <QProgressBar>
#include <QLabel>


using namespace invertedindex; 

//include del arbol

#include <vector>
#include <string>

using std::vector;
using std::string;

typedef vector<string> tDocumentsList;

class DocumentsProcessor{
	
	public:
	DocumentsProcessor(interprete* interpreter);
	~DocumentsProcessor();
	
	/* 
	Setea el directorio origen de trabajo del procesador de docs
	*/	
	void setSourceWorkDirectory( string directory );
	/* 
	Setea el directorio destino de trabajo del procesador de docs
	*/	
	void setDestinationWorkDirectory( string directory );
	/* 
	Lee la el directorio de documentos, y crea la lista de archivos a procesar
	*/
	void loadListDocuments(void);
	/*
	Devuelve el nombre del proximo documento a procesar
	*/
	DocumentFile* 		getNextDocument(void);
	
	/*
	Procesa los documentos contenidos en la lista, devuelve true al finalizar, en caso de error devuelve false
	*/
	bool processDocuments(QProgressBar *progress, int cantidadDocumentos);
	
	/********************/
	InvertedIndexData *getNextIndexData(InvertedIndex *ii,bstree::BSTree& bstreeID);
	
	private:
	int					contadorReg;
	tDocumentsList 		documentsList; //lista de documentos a procesar
	string				sourceDirectory;
	string				destinationDirectory;	
	
	DocumentFile* 		docFile; // documento txt a extraer los terminos
	DictionaryFile* 	dicFile;
	AuxiliaryFile* 		auxFile;
	
	string 				last_word;
	tDocumentNumber		last_doc;
	
	interprete*			interpreter;
};

#endif // __DOCUMENTSPROCESSOR_H__
